package net.uzen.office.account;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.uzen.office.account.model.Account;
import net.uzen.office.account.service.AccountService;
import net.uzen.office.common.controller.BaseFormController;
import net.uzen.office.common.exception.SignInException;
import net.uzen.office.common.util.SessionUtil;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;

public class SignInController extends BaseFormController {

	private AccountService accountService;

	public void setAccountService(AccountService accountService) {
		this.accountService = accountService;
	}

	SignInController() {
		setCommandClass(Account.class);
		setCommandName("account");
	}

	@Override
	protected ModelAndView onSubmit(HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		return signIn(request, response, (Account) command);
	}

	public ModelAndView signIn(HttpServletRequest request,
			HttpServletResponse response, Account account) throws Exception {

		logger.debug(">> signIn ");
		logger.debug(">> " + account.toString());
		// 로그인 시도를 하고,
		// 세션 정보를 등록한다.
		// 로그인 시 요청했던 주소가 있다면, 해당 주소로 리디렉션하고, 아니라면 메인 페이지로 이동한다.

		// TODO : 예외 처리 또는 폼 관련 컨트롤러로 변경

		// 세션 정보를 등록한다.
		try {
			SessionUtil.setSessionInfo(request, accountService.signIn(account));
			logger.debug(">> after setting sessionInfo ");
		} catch (SignInException e) {
			
		} catch (Exception e) {
			
		}

		// 로그인 시 요청했던 주소가 있다면, 해당 주소로 리디렉션하고, 아니라면 메인 페이지로 이동한다.
		ModelAndView mav = new ModelAndView("account/signIn");
		mav.addObject("account", account);
		return mav;
	}
}
